package com.pdd.mall.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.pdd.mall.dto.OrderCreateParam;
import com.pdd.mall.entity.Order;
import com.pdd.mall.entity.OrderItem;

import java.util.List;

/**
 * 订单服务接口
 */
public interface OrderService {

    /**
     * 创建订单
     * @param param 订单参数
     * @param userId 用户ID
     * @return 创建的订单
     */
    Order createOrder(OrderCreateParam param, Long userId);

    /**
     * 获取用户的订单列表
     */
    Page<Order> getOrderList(Long userId, Integer status, Integer pageNum, Integer pageSize);

    /**
     * 获取订单详情
     */
    Order getOrderDetail(String orderNo, Long userId);

    /**
     * 获取订单项列表
     */
    List<OrderItem> getOrderItemList(Long orderId);

    /**
     * 取消订单
     * @param orderNo 订单编号
     * @param userId 用户ID
     * @return 是否取消成功
     */
    boolean cancelOrder(String orderNo, Long userId);

    /**
     * 更新订单状态
     * @param orderNo 订单编号
     * @param status 订单状态
     * @return 是否更新成功
     */
    boolean updateOrderStatus(String orderNo, Integer status);

    /**
     * 获取商家的订单列表
     * @param merchantId 商家ID
     * @param status 订单状态
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @return 订单分页列表
     */
    Page<Order> getMerchantOrderList(Long merchantId, Integer status, Integer pageNum, Integer pageSize);

    /**
     * 获取商家的订单详情
     * @param orderNo 订单编号
     * @param merchantId 商家ID
     * @return 订单详情
     */
    Order getMerchantOrderDetail(String orderNo, Long merchantId);

    /**
     * 商家发货
     * @param orderNo 订单编号
     * @param merchantId 商家ID
     * @param trackingNo 物流单号
     * @return 是否发货成功
     */
    boolean shipOrder(String orderNo, Long merchantId, String trackingNo);

    /**
     * 商家更新订单状态
     * @param orderNo 订单编号
     * @param merchantId 商家ID
     * @param status 订单状态
     * @return 是否更新成功
     */
    boolean updateMerchantOrderStatus(String orderNo, Long merchantId, Integer status);
}
